
#include <bits/stdc++.h>

using namespace std;

/* 分析2个n阶矩阵乘法算法的时间复杂度 
为了便于讨论，这里约定最外层的循环(for)记为for1,第二层为for2，以此类推。
此外进一步细分可以分为for_x判断句和for_x循环体,其中x表示第x层循环。一般的,在不考虑多重循环带来的差异叠加,前者要比后者多执行一次
一般的,对于一个有限循环而言,判断是否进入循环体的条件判断语句执行的次数是比循环体执行次数要多一次,因为最后一次循环体的执行后还需要再做一次判断才能够确认循环(体)是否继续执行;比如while-do;for-loop
而do-while这种现执行后判断的循环情况会有所不同,通常是循环体的执行次数和判断条件次数一致
*/
for (int i = 0; i < n; i++) //频度:n+1 (这里循环变量i的取值范围是0..n)一共是n+1次执行(最终i=n,而不是n-1,尽管i=n时不会执行内部的循环体)
{
    for (int j = 0; j < n; j++) // 频度:n*(n+1);这是一个内部循环(二重),分析for2循环判断语句,循环变量j取值范围是0..n,同样是n+1次执行判断;考虑到外重循环的循环体会执行n次,而每次该for语句会执行n+1次判断,因此该语句的频度为n*(n+1)
    {
        c[i][j] = 0;//频度:n*n;该语句作为for2的循环体,会执行n次,考虑到for2又是for1的循环体会执行n次,因此频度为n*n
        for (int k = 0; k < n; k++) //频度:n*n*(n+1);for3是第三重循环,首先for3作为for2的循环体中的语句,会执行n*n次,而for3本身又是循环,并且k的取值范围是0..n(共n+1个值),也就是会执行n+1次判断,因此频度为n*n*(n+1)
        {
            c[i][j] += a[i][k] * b[k][j];//频度为n*n*n;作为三重循环的循环体,for3会执行
        }
    }

}
//上述代码的所有语句频度之和为2n*n*n+3n*n+2n+1